package unit9;

public class SelectSortDemo {

    public static void main(String[] args) {
        // int[] arr = { 8, 2, 3, 7, 1 };

        int[] arr = new int[8000];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 100 + 1);
        }

        System.out.println("开始选择排序前");
        long start = System.currentTimeMillis();
        // System.out.println(Arrays.toString(arr));
        selectSort2(arr);
        System.out.println("选择排序后");
        long end = System.currentTimeMillis();
        // System.out.println(Arrays.toString(arr));
        System.out.println("共花费" + (end - start) + "毫秒");

    }


    public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            // 初始化最小值的索引
            int minIndex = i;
            // 把当前记录的最小的数和后面所有数进行比较
            for (int j = i + 1; j < arr.length; j++) {
                // 如果后面的数比当前记录的数小
                if (arr[minIndex] > arr[j]) {
                    // 记录最小的那个数的下标
                    minIndex = j;
                }
            }
            // 如果记录的最小数的下标和最初设置的最小值的下标不一样，说明下标为minIndex的数的值比arr[i]小，需要交换，将最小值放到arr[i]的位置
            if (minIndex != i) {
                int temp = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = temp;
            }
        }
    }



    public static void selectSort2(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            // 最小值的索引
            int minIndex = i;
            // 最小值
            int min = arr[i];
            for (int j = i + 1; j < arr.length; j++) {
                if(min > arr[j]) {
                    // 将arr[j]设为最小值
                    min = arr[j];
                    // 重置最小值索引
                    minIndex = j;
                }
            }
            // 将最小值，放在arr[i], 即交换
            if(minIndex != i) {
                arr[minIndex] = arr[i];
                arr[i] = min;
            }
        }
    }

}
